'''
::
    
    ################### 数据位数 ###################
    MiPi_18_BIT = 0  # 18 Bit
    MiPi_24_BIT = 1  # 24 Bit
    MiPi_30_BIT = 2  # 30 Bit
    
    ################### pclk锁存边缘 ###################
    MiPi_FALLING_EDGE = 0  # 下降沿锁存数据
    MiPi_RISING_EDGE = 1  # 上升沿锁存数据
    
    ################### 脉冲有效电平 ###################
    MiPi_LOW_ACTIVE = 0  # 低电平有效
    MiPi_HIGH_ACTIVE = 1  # 高电平有效
    
    ################### 突发还是非突发 ###################
    NONBURST_SYNC_PULSES = 0  # 非突发模式 sync pulses
    NONBURST_SYNC_EVENTS = 1  # 非突发模式 sync events
    BURST_MODE = 2  # 突发模式
    
    ################### 模式选择 ###################
    VIDEO = 0  # Video模式
    COMMAND = 1  # Command模式
    V2C = 2  # V2C模式
    
    ################### D_PHY C_PHY LANE数选择 ###################
    D_PHY_1LANE = 0x11
    D_PHY_2LANE = 0x12
    D_PHY_3LANE = 0x13
    D_PHY_4LANE = 0x14
    D_PHY_8LANE = 0x18
    C_PHY_1LANE = 0x21
    C_PHY_2LANE = 0x22
    C_PHY_3LANE = 0x23
    C_PHY_6LANE = 0x26
    
    ################### AB端口选择 ###################
    AB_Port = 0
    BA_Port = 1
    
    ################### 字体尺寸参数宏定义 ################### 
    FONT0816 = 0x01  # size: w = 8, h = 16
    FONT1632 = 0x02  # size: w = 16, h = 32
    FONT2448 = 0x03  # size: w = 24, h = 48
    FONT3264 = 0x04  # size: w = 32, h = 64
    FONT4080 = 0x05  # size: w = 40, h = 80
    FONT4896 = 0x06  # size: w = 48, h = 96
    
    ################### 色彩宏定义 ################### 
    NOCOLOR = 0x1000000  # 无色
    RED = 0xFF0000
    GREEN = 0x00FF00
    BLUE = 0x0000FF
    WHITE = 0xFFFFFF
    BLACK = 0x000000
    
'''

class StrSSD_Window(object):
    '''    
    开窗模式配置的类对象 ,已经嵌套到 点屏参数配置的类对象里
    '''

    def Command_x_start(self):
        '''    
        X轴开始坐标
        '''

    def Command_y_start(self):
        '''    
        Y轴开始坐标
        '''

    def Command_x_end(self):
        '''    
        X轴结束坐标
        '''

    def Command_y_end(self):
        '''    
        Y轴结束坐标
        '''

class mipi_panel_par(object):
    '''    
    点屏参数配置类
    '''

    autoPanelFre = 0
    '''    
        屏幕刷新率
    '''

    def pclk(self):
        '''    
        屏幕pclk时钟 单位:Mhz,支持小数
        '''

    def h_active(self):
        '''    
        水平同步信号的的有效像素
        '''

    def h_pulse_width(self):
        '''    
        水平同步信号的脉冲宽度
        '''

    def h_front_porch(self):
        '''    
        水平同步信号的前沿
        '''

    def h_back_porch(self):
        '''    
        水平同步信号的后沿
        '''

    def v_active(self):
        '''    
        垂直同步信号的有效像素
        '''

    def v_pulse_width(self):
        '''    
        垂直同步信号的脉冲宽度
        '''

    def v_front_porch(self):
        '''    
        垂直同步信号的前沿
        '''

    def v_back_porch(self):
        '''    
        垂直同步信号的后沿
        '''

    def bit_mode(self):
        '''    
        数据位数
        '''

    def pclk_edge(self):
        '''    
        pclk锁存边缘
        '''

    def h_active_edge(self):
        '''    
        水平同步信号的有效电平
        '''

    def v_active_edge(self):
        '''    
        垂直同步信号的有效电平
        '''

    def de_active_edge(self):
        '''    
        de脉冲有效电平
        '''

    def HS_Mbps(self):
        '''    
        High speed 传输速率
        '''

    def LP_Mbps(self):
        '''    
        LOW Power 传输速率
        '''

    def Burst(self):
        '''    
        突发还是非突发
        '''

    def CmdOrVideo(self):
        '''    
        数据包传输模式（Video or command）
        '''

    def TypeLane(self):
        '''    
        DPHY或者CPHY类型 与 Lane数
        '''

    def PortDir(self):
        '''    
        Port 口(A口 or B口)
        '''

    def Burst_AllLP(self):
        '''    
        突发模式下空闲进LP使能
        '''

    def Cmd_PacketSizeMode(self):
        '''    
        数据包大小模式
        '''

def UserMipi_Init():
    '''    
    Mipi 信号基本初始化

    * 参数   : 无

    * 返回   
        * 0:表示硬件ok
    
    * raise  :   无
    '''

def UserMipi_SetPanelPar(class_panel):  # 无法一次性送出所有数据 传输顺序有固定要求
    '''√
    点屏参数配置初始化函数

    * 参数  
        * class_panel: mipi_panel_par 点屏参数配置类

    * 返回  
        * >=0: 点屏参数配置初始化成功
        * <0: 点屏参数配置初始化失败

    * raise  :   无
    '''

def UserMipi_ConfPanelFre(hz, class_panel):
    '''√
    通过屏参数以刷新率为目标,修改par中的pclk参数,使其达到所要的刷新率.

    * 参数  
        * hz : 屏幕刷新频率
        * par: mipi_panel_par 点屏参数配置类

    * 返回  : 无(修改后的结构体以类的形式返回，返回的形式类似C指针形式并不在由return 返回)

    * 注意  : 函数执行后并不是直接生效,只是修改了par中的pclk参数,具体起作用是 UserMipi_SetPanelPar 函数后才生效
    *         所以要在 UserMipi_SetPanelPar 函数之前使用    

    * raise  :   无
    '''

def Display_Mipi_Init(PCLK, Pane_str):
    '''√
    MIPI屏幕参数设置

    * 参数  
        * PCLK    : pclk 像素时钟 单位Mhz
        * Pane_str: mipi_panel_par 点屏参数配置类

    * 返回  : 无(修改后的结构体以类的形式返回，返回的形式类似C指针形式并不在由return 返回)

    * 注意  : 函数执行后并不是直接生效,只是修改了par中的pclk参数,具体起作用是 UserMipi_SetPanelPar 函数后才生效
    *         所以要在 UserMipi_SetPanelPar 函数之前使用    

    * raise  :   无

    '''

def UserMipi_GetPanelFre(class_panel):
    '''√
    通过屏参数返回现在的刷新率

    * 参数   
        * class_panel: mipi_panel_par 点屏参数配置类

    * 返回   
        * 屏幕刷新频率

    *注意   : 无

    * raise  :   无

    '''

def UserMipi_PclkGetPanelFre(class_panel, pclk):
    '''√
    通过屏前后沿参数与现传进去的pclk计算返回刷新率

    * 参数   
        * class_panel : mipi_panel_par 点屏参数配置类   
        *pclk        : 像素时钟 单位Mhz

    * 返回   
        * 屏幕刷新频率

    *注意   : 无

    * raise  :   无
    '''

def UserMipi_GetPanelPclk(class_panel, hz):
    '''√
    通过屏前后沿参数与刷新率获取pclk

    * 参数   
        * class_panel: mipi_panel_par 点屏参数配置类
        * hz: 屏幕刷新频率

    * 返回   
        * 像素时钟 单位Mhz

    *注意   : 无

    * raise  :   无
    '''

def UserMipi_GetPanelHS_Mbps(class_panel):
    '''√
    通过屏的位数,频率和Lane数计算所需要的HS

    * 参数   
        * class_panel: mipi_panel_par 点屏参数配置类
    
    * 返回   
        * HS速率 单位Mbps

    *注意   : 无

    * raise  :   无
    '''

def UserMipi_SetTiming(class_panel):
    '''
    在点亮的同时动态的修改前后沿参数

    * 参数   
        * class_panel: mipi_panel_par 点屏参数配置类

    * 返回   : 无

    * 注意   : 改pclk需要关闭显示才能修改
    
    * raise  :   无
    '''

def UserMipi_ON(index = None):
    '''
    开启mipi 信号

    * 参数   
        * index:使能的板子 不传默认为全选

    * 返回    
        * 看 EnumUserReturn 枚举

    * 注意   : 这里出来是LP11模式

    * raise  :   无
    '''

def UserMipi_OFF(index = None):
    '''
    关闭MIPI 信号

    * 参数  
        * index:使能的板子 不传默认为全选

    * 返回   
        * 看 EnumUserReturn 枚举

    * 注意   : 无

    * raise  :   无
    '''

def SSD28_LP():
    '''
    配置成LP模式

    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_Video():
    '''
    配置成Video模式

    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_V2C_Enable():
    '''
    激活 V2C

    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_V2C_Disable():
    '''
    失能 V2C
    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_WriteData(date):
    '''
    发送一个MIPI数据,发MIPI初始化用

    * 参数   
        * dat:  要写的数据

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_PLL_ONOFF(on):
    '''
    开启关闭PLL,休眠的进入与退出用

    * 参数   
        * on ： =1:开启 ，=0:关闭

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_EnterConfigMode():
    '''
    进入对应的模式

    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_Set_OE(dat):
    '''
    选择SSD28芯片(无效 不调用)

    * 参数   : 无

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_DisplayFrame(len):
    '''
    切换页面

    * 参数   
        * len: 选择画面

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_GenericShortWrite(len):
    '''
    DT = 0x03, 0x13, 0x23的写操作设置

    * 参数   
        * len: n 写的字节数
    
    * 返回   : 无

    * raise  :   无
    '''

def SSD28_GenericLongWrite(len):
    '''
    DT = 0x29的写操作设置

    * 参数   
        * len: n - 写的字节数

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_DcsShortWrite(len):
    '''
    DT = 0x05, 0x15的写操作设置

    * 参数   
        * len: n 写的字节数

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_DcsLongWrite(len):
    '''
    DT = 0X39的写操作设置

    * 参数
        * len: n 写的字节数

    * 返回   : 无

    * raise  :   无
    '''

def SSD28_DcsReadDT06(reg, len):        #兼容旧版本 因此不在返回读取状态标志位 
    '''
    读操作 DT = 0x06

    * 参数  
        * reg:  LCM 驱动IC寄存器地址  
        * len:  读的长度,单位Byte

    * 返回  
        * 读出的数据列表
        * -1 读失敗 其他 读成功

    * raise  :   无        
    '''

def SSD28_GenericReadDT14(reg, len):
    '''
    读操作 DT=0X14

    * 参数   
        * reg : - LCM 驱动IC寄存器地址   
        * len : - 讀的长度 单位Byte

    * 返回  
        * 读出的数据列表
        * -1 读失敗 
        * 其他 读成功

    * raise  :   无            
    '''

def SSD28_SelectRead(tx):
    '''
    选择读的端口     

    * 参数   
        * tx: 1:选择 MIPI_TX_A ,  2:选择 MIPI_TX_B

    * 返回   : 无

    * raise  :   无    
    '''

def SSD28_SelectWrite(tx):
    '''
    选择写的端口 

    * 参数  
        * tx: =1:选择 MIPI_TX_A ,  =2:选择 MIPI_TX_B ,  =3:选择 MIPI_TX_A 和 MIPI_TX_B
    
    * 返回   : 无

    * raise  :   无   
    '''

def SSD28_DispArea(xs, ys, xe, ye):
    '''
    开窗

    * 参数   
        * xs: X轴起始坐标 
        * ys: Y轴起始坐标
        * xe: X轴结束坐标  
        * ye: Y轴结束坐标

    * 返回   : 无

    * raise  :   无  
    '''

def MIPI_WR(mp_tuple):
    '''
    整合了 DT = 0x39 0x29 0x05 0x15 0x03 0x13 0x23 的MIPI写操作

    * 参数 
        * mp_tuple: 元组,不定长数据,格式: mipi_data = ((0x29,0x11),(0x29,0x29))

    * 返回  : 无

    * raise  :   无  
    '''

def SSD28_Command_HS():
    '''
    在cmd模式下进hs

    * 参数  : 无

    * 返回  : 无

    * raise  :   无  
    '''

def SSD28_Command_LP():
    '''
    cmd模式下进lp

    * 参数  : 无

    * 返回  : 无

    * raise  :   无 
    '''

def SSD28_WriteCmdDat16(cmd,data):
    '''
    2832往寄存器写数据16位的数据

    * 参数  : 
        * cmd: 寄存器
        * data: 数据

    * 返回  : 无

    * raise  :   无 
    '''

def SSD28_ReadCmdDat16(cmd):
    '''
    2832往寄存器读16位的数据

    * 参数  : 
        * cmd: 寄存器
        * data: 数据

    * 返回  : 读到的数据

    * raise  :   无 
    '''

def SSD28_WriteCmdDat32(cmd,data):
    '''
    2832往寄存器写数据32位的数据

    * 参数  : 
        * cmd: 寄存器
        * data: 数据

    * 返回  : 无

    * raise  :   无 
    '''

def SSD28_ReadCmdDat16(cmd):
    '''
    2832往寄存器读32位的数据

    * 参数  : 
        * cmd: 寄存器
        * data: 数据

    * 返回  : 读到的数据

    * raise  :   无 
    '''

def SSD28_Write_APB_Reg(cmd,data):
    '''
    2832_APB写数据32位的数据

    * 参数  : 
        * cmd: 寄存器
        * data: 数据

    * 返回  : 无

    * raise  :   无 
    '''

def SSD28_Read_APB_Reg(cmd):
    '''
    2832 APB 读32位的数据

    * 参数  : 
        * cmd: 寄存器

    * 返回  : 读到的数据

    * raise  :   无 
    '''

